home *** CD-ROM | disk | FTP | other *** search
- #include "sortdata.h"
-
- void main(long maxdata, long* sortdata, swp sw, cmp cm, short* stopflag);
-
- void main(long maxdata, long* sortdata, swp sw, cmp cm, short* stopflag)
- {
- long outer, index, oldindex, high, low, endcount, *pindex, *pouter;
-
- pouter = &sortdata[1];
- for (outer=1; outer < maxdata; outer++, pouter++) {
- low = 0 ;
- high = outer;
- index = -1;
- do {
- oldindex = index;
- index = ((high - low) >> 1) + low;
- if (index != oldindex) {
-
- if (*stopflag) {
- return;
- }
-
- if ((*cm)(outer, index, *pouter, sortdata[index]) < 0) {
- high = index;
- }
- else {
- low = index;
- }
- }
- } while (oldindex != index);
-
- if (high != outer) {
- endcount = low;
- if (*pouter > sortdata[low]) {
- endcount++;
- }
- pindex = pouter;
- for (index = outer; index > endcount; index--, pindex--) {
- (*sw)(index, index -1, pindex, pindex -1);
- }
- }
- }
- }
-